Skip to main content

golang介紹#

Go是Google開發的一種靜態強型別、編譯型、並發型,並具有垃圾回收功能的程式語言。

靜態強型別#

Example banner

  • 關於C語言、C#、C++三種程式語言的差異
    • C語言是一種結構化的程式語言,通常運做在較底層(作業系統、驅動程式、嵌入式系統、解碼引擎)的程式設計上,C語言較接近硬體。C语言本身没有提供GC机制
    • C++ 語言是附著在C語言之上的一個程式語言,C++是結構化的物件導向程式語言,跟C語言很像,但可以使用物件導向的方式來設計程式,較常用在(驅動程式、嵌入式系統、遊戲引擎)。
    • C# 是一種物件導向程式語言,完整的物件導向,比C, C++好學,使用微軟的Virtual Studio學習較好學、較常用在:遊戲設計(Unity, Cocos2D)、資料庫應用程式。)具自動垃圾收集
  • Java, C# 等高階語言本身內建了垃圾回收器,自動的垃圾回收可以讓程式員不需要考慮太多動態記憶體釋放、管理問題, 這樣可以減少了內存洩漏、詭異的錯誤導致系統崩潰等問題。

編譯 vs 直譯 & 混合#

  • 編譯語言(英語:Compiled language)是一種程式語言類型,通過編譯器來實作。它不像直譯語言一樣,由直譯器將程式碼一句一句執行,而是以編譯器,先將程式碼編譯為機器碼,再加以執行。
  • 直譯語言(英語:Interpreted language)是一種程式語言類型。這種類型的程式語言,會將程式碼一句一句直接執行,不需要像編譯語言(Compiled language)一樣,經過編譯器先行編譯為機器碼,之後再執行。這種程式語言需要利用直譯器,在執行期,動態將程式碼逐句直譯(interpret)為機器碼,或是已經預先編譯為機器碼的子程式,之後再執行。
  • 理論上,任何程式語言都可以是編譯式,或直譯式的。它們之間的區別,僅與程式的應用有關。許多程式語言同時採用編譯器與直譯器來實作,其中包括Lisp,Pascal,BASIC 與 Python。JAVA及C#採用混合方式,先將程式碼編譯為位元組碼,在執行時再進行直譯。

vs java#

  • Java程式語言的風格十分接近C++語言。繼承了C++語言物件導向技術的核心,
  • Java不同於一般的編譯語言或直譯語言。它首先將原始碼編譯成位元組碼,再依賴各種不同平台上的虛擬機器來解釋執行位元組碼,從而具有「一次編寫,到處執行」的跨平台特性。

為什麼使用go#

設計初衷#

  • 為什麼要用Go語言?segmentfault
    • 設計Go語言是為了解決當時Google開發遇到的一些問題
    • Go的編譯為什麼快:Go編譯速度快,主要出於四個原因使用了import的引用管理方式;沒有模板的編譯負擔;1.5版本後的自舉編譯器優化;更少的關鍵字。
    • Go的實際性能如何:Go雖然還無法達到C++那樣的極致性能
    • Go的並發編程: Go的並發量可以比大部分語言里普通的線程實現要高 足夠輕量化的線程在相同的內存下也就可以有更高並發量(服務器CPU還沒有飽和的情況下),同時也可以減少很多上下文切換的時間開銷[9]。但是如果你的每個線程佔用空間都非常大時(比如10MB,當然這是非常規需求的情況下),Go的輕量化優勢就沒有那麼明顯了。
    • Go的垃圾回收
    • Go不適合做什麼:
      • 極致高性能優化的場景,你可能需要使用C/C++,甚至是彙編;
      • 簡單流程的腳本工具、數值分析、深度學習,可能Python更適合(至少目前是);
      • 搭一個博客或網站,PHP何嘗不是天下第一的語言呢;
      • 如果你想比較方便找到一份的後端工作,絕大部分公司的Java崗一直缺人(在實際生產過程中,目前Go仍沒有比Java表現得好太多,至少沒有好到讓一個部門/公司將核心業務重新轉向Go來進行重構);
    • 擴展閱讀
      • 为什么 Go 语言在某些方面的性能还不如 Java?
        • 来列一下Go的不足吧:channel如果使用不当,非常容易死锁(没有现成的Future机制 ,要自己通过channel实现)/Java中很多认为理所当然的库,在Go中发现要重新造轮子(不提供routine池/标准库中数据结构远不如Java丰富)/起新routine时一定要注意recover兜底,否则万一panic了,整个程序都挂了。???
        • 作为一门较新的语言,标准库还处在完善阶段(2017)
        • Java的不足:内存、CPU消耗大/程序需要预热/Spring全家桶越来越重
  • 谢孟军:我为什么选择使用Go语言?2016
    • 內有設計初衷 優缺點
    • 這包括互聯網應用、系統編程和網絡編程。Go裡面的標準庫基本上已經是非常穩定了,特別是我這裡提到的三個,網絡層、系統層的庫非常實用。
    • GC延迟有点大,在并发很大的情况下,处理很大的日志,GC没有那么快,内存回收不给力,后来经过Profile程序改进之后得到了改善。目前来看,GC已经优化的非常好了,Go1.5、Go1.6的GC前后对比图。

體積#

golang編譯更小體積的可執行應用程序?還可以更小喔??

程式的啟動速度#

可以看others-程式的啟動速度分頁說明

Go 交叉編譯(跨平台編譯),二進位制可執行檔案#

安全#

Go 不需要程序员直接管理内存,所有内存分配都由语言运行时自行管理

并发性#

輕量級線程Goroutines,天生併發的設計,開銷小看另一篇討論

與其他語言相比 other....#

  • go是強型別語言麼 Go的語法接近C語言,與C++相比,不同於Java.... (不懂,文不對題 待查)